#include <stdio.h>
typedef struct person
{
    int id;
    int age;
}p;
void sort(void * arr,int elem,int len,int (*p)(void * a,void * b));
/**
 * @function:无需指定类型的排序算法
 * @param arr ：需要排序数组的首指针
 * @param elem ：需要排序类型的字节数
 * @param len ：需要排序数组的元素个数
 * @param p ：指向比较回调函数的指针
 */
int sortInt(void *a,void *b);
/**
 * @function:int类型的比较及交换函数,从小到大
 * @param a：void类型指针，一个需要比较的int类型数的地址
 * @param b:void类型指针，另外一个需要比较的int类型数的地址
 * @return：输出比较的大小状态
 */
int sortDouble(void *a,void *b);
/**
 * @function:double类型的比较及交换函数，从小到大
 * @param a：void类型指针，一个需要比较的double类型数的地址
 * @param b:void类型指针，另外一个需要比较的double类型数的地址
 * @return：输出比较的大小状态
 */
int sortPerson(void *a,void *b);
/**
  * @function:person类型的比较及交换函数，年龄从小到大
 * @param a：void类型指针，一个需要比较的person类型数的地址
 * @param b:void类型指针，另外一个需要比较的person类型数的地址
 * @return：输出比较的大小状态
 */
void sort(void * arr,int elem,int len,int (*p)(void * a,void * b))
{
    char * begin=(char *)arr;
    for(int i=0;i<len-1;++i)
    {
        for(int j=i+1;j<len;++j)
        {
            int e=p(begin+i*elem,begin+j*elem);
        }
    }
}

int sortInt(void *a,void *b)
{
    int *tempa=(int *)a;
    int *tempb=(int *)b;
    if(*tempa==*tempb)return 0;
    else if(*tempa<*tempb)return -1;
    else
    {
        int temp=*tempa;
        *tempa=*tempb;
        *tempb=temp;
        return 1;
    }
}
int sortDouble(void *a,void *b)
{
    double *tempa=(double *)a;
    double *tempb=(double *)b;
    if(*tempa==*tempb)return 0;
    else if(*tempa<*tempb)return -1;
    else {
        double temp=*tempa;
        *tempa=*tempb;
        *tempb=temp;
        return 1;
    }
}
int sortPerson(void *a,void *b)
{
    p *tempa=(p *)a;
    p *tempb=(p *)b;
    if((*tempa).age==(*tempb).age)return 0;
    else if((*tempa).age<(*tempb).age)return -1;
    else {
        p temp=*tempa;
        *tempa=*tempb;
        *tempb=temp;
        return 1;
    }
}
void test()
{
    int a[10]={10,9,8,7,6,5,4,3,2,1};
    double b[10]={10.1,12,3,13.2,8,7,6.7,6.5,45,2.3};
    p c[3];
    c[0].age=12,c[0].id=1;
    c[1].age=1,c[1].id=2;
    c[2].age=17,c[2].id=3;
    sort(a,sizeof (int),10,sortInt);
    for (int (i) = 0; (i) < 10; ++(i)) {
        printf("%d ",a[i]);
    }
    printf("\n");
    sort(b,sizeof (double ),10,sortDouble);
    for (int (i) = 0; (i) < 10; ++(i)) {
        printf("%f ",b[i]);
    }
    printf("\n");
    sort(c,sizeof (p),3,sortPerson);
    for (int (i) = 0; (i) < 3; ++(i)) {
        printf("%d %d\n",c[i].id,c[i].age);
    }
    printf("\n");
}
int main()
{
    test();
    return 0;
}